var getIntersectionNode = function (head1, head2) {
  var getLenAndTail = function (head) {
    let tail = null
    let len = 0
    while (head !== null) {
      len++
      if (head.next === null) {
        tail = head
      }
      head = head.next
    }
    return { tail, len }
  }
  let head1LenTail = getLenAndTail(head1)
  len1 = head1LenTail.len
  tail1 = head1LenTail.tail
  let head2LenTail = getLenAndTail(head2)
  len2 = head2LenTail.len
  tail2 = head2LenTail.tail
  if (tail1.value !== tail2.value) {
    return null;
  }
  let p1 = head1
  let p2 = head2
  // 计算链表长度差
  let diff = Math.abs(len1 - len2)
  // 移动指针至相同起始位置
  if (len1 > len2) {
    while (diff > 0) {
      p1 = p1.next
      diff--
    }
  } else if (len1 < len2) {
    while (diff > 0) {
      p2 = p2.next
      diff--
    }
  }
  while (p1.value !== p2.value) {
    p1 = p1.next
    p2 = p2.next
  }
  return p1
}
let head1 = { "value": 1, "next": { "value": 2, "next": { "value": 3, "next": { "value": 4, "next": { "value": 5, "next": null } } } } }
let head2 = { "value": 3, "next": { "value": 10, "next": { "value": 7, "next": { "value": 6, "next": { "next": { "value": 4, "next": { "value": 5, "next": null } } } } } } }
let rst = getIntersectionNode(head1, head2)
console.log(rst)
// 先遍历链表A，得到链表A的长度和尾节点。
// 再遍历链表B，得到链表B的长度和尾节点。
// 如果链表A和链表B的尾节点不相同，说明两个链表不相交，直接返回null。
// 如果链表A和链表B的尾节点相同，说明两个链表相交，计算它们的长度差diff。
// 让指针p1指向链表A的头节点，指针p2指向链表B的头节点。
// 如果diff大于0，则让p1先向前移动diff步。
// 如果diff小于0，则让p2先向前移动|diff|步。
// 然后同时移动p1和p2，直到找到相交节点或者到达链表的末尾。